#pragma once

#include<stdio.h>
#include<stdbool.h>
#include<assert.h>
#include<stdlib.h>

// 队列 ： 不带头单向链表 ---> 先进先出

// 队列的节点定义

//typedef int QDataType;
//typedef struct QueueNode
//{
//	QDataType* val;
//	struct Queue* next;
//
//}QNode;
//
//// 队列的结构定义
// typedef struct Queue
//{
//	QNode* phead;
//	QNode* ptail;
//	int size;
//}Queue;
//
// // 初始化
// void QueueInit(Queue* pq);
// // 销毁
// void QueueDestroy(Queue* pq);
//
// // 入队列
// void QueuePush(Queue* pq, QDataType x);
// // 出队列
// void QueuePop(Queue* pq);
// // 取队头数据
// QDataType QueueFront(Queue* pq);
// // 取队尾数据
// QDataType QueueBack(Queue* pq);
// 
// int QueueSize(Queue* pq);
// bool QueueEmpty(Queue* pq);

typedef int QDataType;
 typedef struct QueueNode
{
	QDataType* val;
	struct QueueNode* next;
}QNode;

 typedef struct Queue
{
	QNode* phead;
	QNode* ptail;
	int size;
}Queue;

 // 初始化
 void QueueInit(Queue* pq);
 // 销毁
 void QueueDestroy(Queue* pq);

 // 入队列
 void QueuePush(Queue* pq, QDataType x);
 // 出队列
 void QueuePop(Queue* pq);

 QDataType QueueFront(Queue* pq);
 QDataType QueueBack(Queue* pq);

 int QueueSize(Queue* pq);
 bool QueueEmpty(Queue* pq);

